package com.xm.queue.task;

import com.xm.util.StringUtil;
import lombok.extern.slf4j.Slf4j;

/**
 * 生产者
 */
@Slf4j
public class Producer {

    public static void make(int num) {
        for (int i = 0; i < num; i++) {
            addTask(new AsyncTask("Task-" + StringUtil.formatZero(TaskUtil.incrementAndGet(), 5)));
        }
    }
    public static void makeNew(int num) {
        for (int i = 0; i < num; i++) {
            addTaskNew(new AsyncTask("Task-" + StringUtil.formatZero(TaskUtil.incrementAndGet(), 5)));
        }
    }
    public static void makePutAlways(int num) {
        for (int i = 0; i < num; i++) {
            addTaskPutAlways(new AsyncTask("Task-" + StringUtil.formatZero(TaskUtil.incrementAndGet(), 5)));
        }
    }
    public static void makeOfferAlways(int num) {
        for (int i = 0; i < num; i++) {
            addTaskOfferAlways(new AsyncTask("Task-" + StringUtil.formatZero(TaskUtil.incrementAndGet(), 5)));
        }
    }

    public static void addTask(AsyncTask task) {
        TaskUtil.put(task);
    }
    public static void addTaskNew(AsyncTask task) {
        TaskUtil.putNew(task);
    }
    public static void addTaskPutAlways(AsyncTask task) {
        TaskUtil.putAlways(task);
    }
    public static void addTaskOfferAlways(AsyncTask task) {
        TaskUtil.offerAlways(task);
    }

    public static void testLimiterPut(int num) {
        log.info("testLimiterPut {}", num);
        for (int i = 0; i < num; i++) {
            TaskUtil.testLimiterPut(StringUtil.formatZero(i, 5));
        }
    }

    public static void testLimiterPoll(int num) {
        log.info("testLimiterPoll {}", num);
        for (int i = 0; i < num; i++) {
            TaskUtil.testLimiterPoll(StringUtil.formatZero(i, 5));
        }
    }
}
